﻿/**
 *			INI配置文件读写
 */
#ifndef OSS_INI_H_
#define OSS_INI_H_
#include "ossType.h"

OSS_EXTERN_BEG

/**
    *      类似于windows的GetPrivateProfileInt函数
    *@lpSectionName    段名
    *@lpKeyName        键名
    *@nDefault         默认值
    *@return           获取成功返回相应到值，如果获取不成功返回默认值
    *@notes             当前只支持gbk或gb2312编码的文件
    *                   对于Utf8编码的，中文会出现乱码，头一行最好为注释
    *                   对于unicode编码的，无法解析。
    */
int OssGetPrivateProfileInt(const char* lpSectionName,
                            const char* lpKeyName,
                            int nDefault,
                        const char* acIniFilePath
                        );

/**
    *     将Int值写入配置文件中
    *@lpSectionName    段名
    *@lpKeyName        键名
    *@nValue           写入到值
    *@return           写入成功返回TRUE
    *@notes             当前只支持gbk或gb2312编码的文件
    *                   对于Utf8编码的，中文会出现乱码，头一行最好为注释
    *                   对于unicode编码的，无法解析。
    */
Bool OssWritePrivateProfileInt(const char* lpSectionName,
                                        const char* lpKeyName,
                                        int nValue,
                                        const char* acIniFilePath
                        );

/**
    *      类似于windows的 GetPrivateProfileString 函数
    *@lpSectionName    段名
    *@lpKeyName        键名
    *@lpDefault        默认字符串
    *@lpReturnedString 存放返回字符串到缓存区
    *@nSize            缓存区大小
    *@return           返回实际获取到字符数
    *@notes             当前只支持gbk或gb2312编码的文件
    *                   对于Utf8编码的，中文会出现乱码，头一行最好为注释
    *                   对于unicode编码的，无法解析。
    */
DWord OssGetPrivateProfileString(
                                    const char* lpSectionName,
                                    const char* lpKeyName,
                                    char* lpDefault,
                                    char* lpReturnedString,
                                    DWord nSize,
                                    const char* acIniFilePath
                                );
/**
    *      类似于windows的 WritePrivateProfileString 函数
    *@notes             当前只支持gbk或gb2312编码的文件
    *                   对于Utf8编码的，中文会出现乱码，头一行最好为注释
    *                   对于unicode编码的，无法解析。
    */
Bool OssWritePrivateProfileString(
                                    const char* lpSectionName,
                                    const char* lpKeyName,
                                    const char* lpString,
                                    const char* acIniFilePath
                                );

//////////////////////////////////////////////////////////////////////////

/**
 *		打开INI配置文件
 *@iniFilePath		ini文件路径
 *@return			成功返回 ini文件句柄
 *					失败返回 NULL
 *@author			吴建凰 2015年12月28日
 */
Handle OssOpenIni(char* iniFilePath);
#define oss_open_ini OssOpenIni

/**
 *		关闭打开的文件句柄
 *@hini				ini文件句柄，oss_open_ini返回值
 *@return			成功返回 TRUE
 *					失败返回 FALSE
 *@author			吴建凰 2015年12月28日
 */
Bool  OssCloseIni(Handle hini);
#define oss_close_ini OssCloseIni

/**
 *      获取指定键的整数值 
 *@hini				ini文件句柄，oss_open_ini返回值
 *@lpSectionName    段名
 *@lpKeyName        键名
 *@nDefault         默认值
 *@return           获取成功返回相应到值，如果获取不成功返回nDefault
 *@author			吴建凰 2015年12月28日
 */
int OssIniGetInt(	Handle hini,
						char* lpSectionName,
						char* lpKeyName,
						int nDefault
					);

/**
 *     修改指定键的整型值，不存在则新建
 *@hini				ini文件句柄，oss_open_ini返回值
 *@lpSectionName    段名
 *@lpKeyName        键名
 *@nValue           写入到值
 *@return           成功返回 TRUE		(写入值错误)
 *					失败返回 FALSE
 *@author			吴建凰 2015年12月28日
 */
Bool OssIniSetInt(	Handle hini,
						char* lpSectionName,
                        char* lpKeyName,
                        int	  nValue
                    );

/**
 *      获取指定键的字符串值
 *@hini				ini文件句柄，oss_open_ini返回值
 *@lpSectionName    段名
 *@lpKeyName        键名
 *@lpDefault        默认字符串
 *@lpReturnedString 存放返回字符串到缓存区
 *@nSize            缓存区大小
 *@return           返回实际获取到字符数(bug:返回为缓冲区的大小)
 *@author			吴建凰 2015年12月28日
 */
int OssIniGetString(	Handle hini,
                        char* lpSectionName,
                        char* lpKeyName,
                        char* lpDefault,
                        char* lpReturnedString,
                        DWord nSize
                     );
/**
 *      设置指定键的字符串值，不存在则新建
 *@hini				ini文件句柄，oss_open_ini返回值
 *@lpSectionName    段名
 *@lpKeyName        键名
 *@lpString			键值
 *@return			成功返回 TRUE
 *					失败返回 FALSE
 *@author			吴建凰 2015年12月28日
 */
Bool OssIniSetString(	Handle hini,
                        char* lpSectionName,
                        char* lpKeyName,
                        char* lpString
                     );

/**
 *      打印INI内容
 */
void OssPrintIniContext(Handle hini);

OSS_EXTERN_END

#endif